package org.hzz.promotions.domain.service;

import io.gitee.pkmer.convention.page.PageResponse;
import io.gitee.pkmer.convention.page.query.PageQuery;
import io.gitee.pkmer.ddd.shared.service.DomainService;
import org.hzz.promotions.domain.entity.ExchangeCodeEntity;
import org.hzz.promotions.types.enums.code.CodeType;

import java.time.LocalDateTime;

/**
 * @author <a href="mailto:1193094618@qq.com">pkmer</a>
 * <br>
 * <a href = "https://gitee.com/developeros/videos-online">Code Repository</a>
 * At 2024/8/31
 * 兑换码领域服务
 */
public interface ExchangeCodeDomainService extends DomainService {

    /**
     * 异步生成兑换码
     * @param targetId 兑换码的目标id
     * @param totalNum 要生成的数量
     * @param endTime 有效截止时间
     */
    void asyncGenerateCode(Long targetId,int totalNum, LocalDateTime endTime);

    /**
     * 删除目标id对应的兑换码
     * @param targetId 目标id
     */
    void deleteCouponCodeByTargetId(Long targetId);


    /**
     * 分页查询兑换码
     * @param pageQuery 分页查询参数
     * @return 分页处理的兑换码
     */
    PageResponse<ExchangeCodeEntity> pageQuery(PageQuery pageQuery);


    /**
     * 根据兑换码获取优惠券实体
     * @param code 兑换码
     * @param type 兑换码类型
     * @return 优惠券实体
     */
    ExchangeCodeEntity getExchangeCodeEntityByCode(String code, CodeType type);

    /**
     * 使用兑换码
     * @param serialNum 序列号 其实就是id
     * @param userId 用戶id
     */
    void useExchangeCode(int serialNum,long userId);
}
